package mr.ali.video.web.Exception;

/**
 * @author Mr-ali
 */
public class ServiceException extends RuntimeException {
   private int code = R.INTERNAL_SERVER_ERROR;

   public ServiceException() {
   }

   public ServiceException(String message) {
      super(message);
   }

   public ServiceException(String message, Throwable cause) {
      super(message, cause);
   }

   public ServiceException(Throwable cause) {
      super(cause);
   }

   public ServiceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
      super(message, cause, enableSuppression, writableStackTrace);
   }

   public ServiceException(int code) {
      this.code = code;
   }

   public ServiceException(String message, int code) {
      super(message);
      this.code = code;
   }

   public ServiceException(String message, Throwable cause, int code) {
      super(message, cause);
      this.code = code;
   }

   public ServiceException(Throwable cause, int code) {
      super(cause);
      this.code = code;
   }

   public ServiceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, int code) {
      super(message, cause, enableSuppression, writableStackTrace);
      this.code = code;
   }

   /**
    * 用户发出的请求有错误，服务器没有新建或修改数据的操作
    */
   public static ServiceException INVALID_REQUEST(String message) {
      return new ServiceException(message, R.INVALID_REQUEST);
   }

   /**
    * 用户发出的请求不存在的记录
    */
   public static ServiceException NOT_FOUND(String message) {
      return new ServiceException(message, R.NOT_FOUND);
   }

   /**
    * 用户请求的资源被永久的删除，且在不会得到的
    */
   public static ServiceException GONE(String message) {
      return new ServiceException(message, R.GONE);
   }

   /**
    * 当创建一个对象时，发生一个验证错误
    */
   public static ServiceException UNPROCESABLE_ENTITY(String message) {
      return new ServiceException(message, R.UNPROCESABLE_ENTITY);
   }

   public int getCode() {
      return code;
   }

   public void setCode(int code) {
      this.code = code;
   }
}
